/**
 * @Auther: MFM
 * @Date: 2022/3/14 - 03 - 14 - 15:43
 * @version: 1.0
 */

public class ArrayStackDemo<E> implements Stack<E>{
    /*
     * 栈
     * 只能从一端添加，只能从这一端取出，将这一端成为栈顶
     * 先进后出
     *
     * 方法：入栈（压栈） void push（E）
     *      出栈       E pop（）
     *       查看栈顶元素 E peek（）
     *       查看栈内有多少元素 int getSize（）
     *       查看栈是否为空 boolean isEmpty（）
     *
     * 扩充：如果对空栈进行出栈操作 称为 栈下溢
     *       如果size>capacity 称为 栈上溢
     * */

    private ArrayDemo<E> array;

    //指定容量构造函数
    public ArrayStackDemo(int capacity) throws Exception{
        array = new ArrayDemo<>(capacity);
    }

    //默认容量构造函数
    public ArrayStackDemo() throws Exception{
        array = new ArrayDemo<>(10);
    }

    //入栈
    @Override
    public void push(E e) throws Exception{
        if (getSize()== array.getCapacity()){
            return;
        }
        array.addLast(e);
    }

    //出栈
    @Override
    public E pop() throws Exception{
        if (getSize()==0){
            return null;
        }
        return array.deleteData(array.getSize());
    }

    //查看栈顶
    @Override
    public E peek() throws Exception{
        return array.seeData(array.getSize());
    }

    //查看栈内有多少元素
    @Override
    public int getSize() throws Exception{
        return array.getSize();
    }

    //判断栈内是否为空
    @Override
    public boolean isEmpty() throws Exception{
        return array.getSize()==0;
    }

    @Override
    public String toString() {
        return "ArrayStackDemo{" +
                "array=" + array +
                '}';
    }
}
